package editorsvg.editor.herramientas;

import editorsvg.editor.cursores.Cursores;
import editorsvg.editor.formas.Rectangulo;
import editorsvg.editor.vista.EditorDocumento;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Shape;
import java.awt.event.MouseEvent;
import java.awt.geom.Point2D;

/**
 * Herramienta para la insercción de rectangulos.
 */
public class HerramientaRectangulo extends HerramientaBase {
    private EditorDocumento editor;
    private Rectangulo rectangulo;
    private Point posicionBase;
 
    public HerramientaRectangulo(EditorDocumento editor) {
        this.editor = editor;        
    }

    @Override
    public boolean pulsado(MouseEvent e) {
        this.rectangulo = new Rectangulo();
//        editor.iniciarCreacionForma(rectangulo);        
        posicionBase = e.getPoint();        
        Point2D posicion = editor.getConversor().aUnidadesReales(posicionBase);
        rectangulo.setPosicion(posicion);
        return true;
    }

    @Override
    public boolean arrastrando(MouseEvent e) {
        actualizarForma(e.getPoint());
        return true;
    }

    @Override
    public boolean liberado(MouseEvent e) {
        if (posicionBase.equals(e.getPoint())) {
            return false;
        }
        actualizarForma(e.getPoint()); 
        editor.finalizarCreacionForma(rectangulo);
        return true;
    }
    
    private void actualizarForma(Point posicionActualRaton) {
        Point2D punto = editor.getConversor().aUnidadesReales(posicionActualRaton);        
        rectangulo.setAncho(punto.getX() - rectangulo.getX());
        rectangulo.setAlto(punto.getY() - rectangulo.getY());
    }

    @Override
    public Cursor getCursor() {
        return Cursores.RECTANGULO.getCursor();
    }

    @Override
    public void pintarEnPixeles(Graphics2D graphics) {  
        if (rectangulo == null) {
            return;
        }
        graphics.setColor(Color.BLACK);            
        graphics.setXORMode(Color.WHITE);
        graphics.setStroke(new BasicStroke(1));
        
        Shape formaPixels = editor.getConversor().transformarAPixeles(rectangulo.getShape());
        graphics.draw(formaPixels);
        
        graphics.setPaintMode();
    }

}
